<?php
/**
 * @see Zend_Form_Element_Multi
 */
require_once "Zend/Form/Element/Multi.php";

/**
 * Элемент формы, реализующий выбор записей из заданного справочника
 * 
 * @category Phorm
 * @package Form_Element
 * @name /Phorm/Form/Element/Dictionary.php
 * @copyright phorm.ru
 * @since 11.07.2012
 * @author vladimir@kachalov.net
 */

class Phorm_Form_Element_Dictionary extends Zend_Form_Element_Multi {
	
	/**
	 * По умолчанию используется поле типа select
	 * @var string
	 */
	public $helper = 'formSelect';
	
	/**
     * По умолчанию возможен выбор только одного элемента
     * @var bool
     */
    protected $_isArray = false;
	
	/**
	 * Определяем массив записей, тип элемента и дергаем родительский конструктор
	 *
	 * @param mixed $spec
	 * @param array $options
	 */
	
	public function __construct($spec, $options = null) {
		
		$translate = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('Translate');
		
		$pairs = array();
		
		/**
		 * Определяем тип элемента
		 * select, radio - одиночный выбор
		 * multiselect, checkbox - множественный выбор
		 */
		
		$type = isset($options['type']) 
			&& in_array(strtolower($options['type']),array('select','multiselect','checkbox','radio'))
				? strtolower($options['type'])
				: 'select';
				
		switch ($type) {
			
			case 'multiselect':
				$this->helper = 'formSelect';
				$this->_isArray = true;
				$this->multiple = 'multiple';
				break;
				
			case 'checkbox':
				$this->helper = 'formMultiCheckbox';
				$this->_isArray = true;
				$this->multiple = 'multiple';
				break;
				
			case 'radio':
				$this->helper = 'formRadio';
				break;
				
			default:
				$pairs = array(null=>$translate->_('---Выберите---'));
				break;
			
		}
		
		/**
		 * Добавляем записи из справочника на элемент
		 */
		
		if(isset($options['dictionaryid'])) {
			
			require_once 'Phorm/Dictionaries.php';
			$Dictionaries = new Phorm_Dictionaries();
			
			if(isset($options['multioptions']) && is_array($options['multioptions'])) {
				$pairs += $options['multioptions'];
			}
						
			$options['multioptions'] = $pairs + $Dictionaries->getEntriesListAsPairs($options['dictionaryid']);
			
			unset($options['dictionaryid']);
			
		}
		
		parent::__construct($spec, $options);
		
	}
	
}

